[DB]Index란?
2023-10-14
Index
쉽게 찾아볼 수 있도록 일정한 순서에 따라 놓은 목록
Index는 원하는 데이터를 빠르게 찾기 위한 기술로 DB에서는
SELECT
문에 활용 가능데이터가 특정 기준으로 정렬되어 검색 속도를 향상 시킬 수 있음.
DB 테이블에 대한 검색 성능을 향상시키는 구조로
SELECT
문에서도WHERE
,JOIN
,ORDER BY
,GROUP BY
절등에 활용
Index의 특징
Index는 항상 최신의 정렬 상태를 유지
Index도 하나의 DB 객체
DB 크기의 약 10% 정도의 저장공간 차지
장점
가장 큰 특징은 데이터들이 정렬이 되어있다는점.
이러한 특징으로 인해 조건 검색 영역에서 큰 장점
1. 조건 검색 where절의 효율성
테이블을 만들고 안에 데이터가 쌓이면 테이블의 행은 내부적으로 순서가 없이 저장된다. 그리하여 where절에 특정 조건에 맞는 데이터들을 찾아낼 때도 행의 처음부터 끝까지 다 익어서 검색 조건에 맞는지 비교한다. 인덱스 테이블은 데이터들이 정렬되어 저장되어 있기 때문에 해당 조건에 맞는 데이터를 빠르게 찾아낼 수 있다.
2. 정렬 order by절의 효율성
인덱스를 사용하면 order by에 의한 정렬과정을 피할 수 있다.
3. min, max의 효율적인 처리가 가능
min 값과 max값을 행의 시작 값과 끝 값 한 건씩만 가져오면 되기 때문에 훨씬 효율적
단점
가장 큰 문제점은 정렬된 생태를 계속 유지켜줘야 한다. 행 내에 데이터 값이 바뀌는 부분이라면 악영향을 미침.
1. 인덱스는 DML에 취약
insert,update, delete를 통해 데이터가 추가되거나 값이 바뀐다면 인덱스 테이블 내에 있는 값들을 다시 정렬해야함. DML이 빈번한 테이블보다 검색을 위주로 하는 테이블에 인덱스를 생성하는 것이 좋음
2.무조건 인덱스 스캔이 좋은것은 아닌다.
검색을 위주로 하는테이블에 인덱스를 생성하는 것이 좋지만 무조건 검색 시에도 좋은것은 아님. 인덱스는 테이블 전체 데이터 중에서 10~15% 이하의 데이터를 처리하는 경우에만 효율적이고 그 이상의 데이터를 처리할 땐 인덱스를 사용하지 않는것이 더 좋음. 1개의 데이터가 있는 테이블과 100만 개의 데이터가 있을 때, 100만개의 테이블은 인덱스 스캔이 유리하지만, 1개의 데이터가 있는 테일블은 풀 스캔이 빠를 것이다.
인덱스 생성은 마지막 수단.
인덱스 생성 전략
생성된 인덱스를 가장 효율적으로 사용하려면 데이터의 분포도는 최대한 그리고 조건절에 호출 빈도는 자주 사용되는 컬럼을 인덱스로 생성하는 것이 좋음.
조건절에 자주 등장하는 컬럼
항상 = 으로 비교되는 컬럼
중복되는 데이터가 최소한인 컬럼
order by 절에서 자주 사용되는 컬럼
join 조건으로 자주 사용되는 컬럼
Index 생성, 추가, 조회, 삭제
// 생성 CREATE INDEX idx_name ON column_name(table_name) // 추가 ALTER TABLE table_name ADD INDEX idx_name(column_name) // 조회 SHOW INDEX FROM table_name // 삭제 ( 수정 시, 삭제 후 재생성) ALTER TABLE table_name DROP INDEX idx_name